// 请求响应参数（不包含data）
export interface Result {
  code: string;
  msg: string;
}

// 请求响应参数（包含data）
export interface ResultData<T = any> extends Result {
  data: T;
}

// 分页响应参数
export interface ResPage<T> {
  list: T[];
  pageNum: number;
  pageSize: number;
  total: number;
}

// 分页请求参数
export interface ReqPage {
  pageNum: number;
  pageSize: number;
}

// 文件上传模块
export namespace Upload {
  export interface ResFileUrl {
    fileUrl: string;
    fileId: string;
  }
}

// 登录模块
export namespace Login {
  export interface ReqLoginForm {
    username: string;
    password: string;
    rememberMe: boolean;
  }

  export interface UserInfo {
    companyId: number;
    companyName: string;
    companyVersion: string;
    companyVersionExpiryTime: string;

    employeeId: number;
    employeeName: string;
    employeeIsAdmin: boolean;
    employeeRoleIds: number[];
    employeePermissions: string[];
  }

  export interface ResLogin {
    access_token: string;
    userInfo: UserInfo;
  }
  export interface ResAuthButtons {
    [key: string]: string[];
  }
}

// 员工管理模块
export namespace Employee {
  // 员工列表查询参数
  export interface ReqEmployeeParams extends ReqPage {
    name?: string;
    status?: number;
    roleIds?: number[];
  }

  // 员工列表响应参数
  export interface ResEmployeeList {
    /*员工Id */
    id: number;

    /*员工姓名 */
    name: string;

    /*员工手机号 */
    phone: string;

    /*性别：1=男、2=女 */
    gender: number;

    /*身份证号 */
    idCard: string;

    /*生日 */
    brithday: string;

    /*状态：0=禁用、1=启用 */
    status: number;

    /*居住地址 */
    address: string;

    /*头像Url */
    avatarUrl: string;

    /*员工照片 */
    photoUrls: {
      /*图像Url */
      url: string;

      /*图像Id */
      uid: number;
    }[];

    /*健康证 */
    healthCertificateUrl: string;

    /*护理证 */
    nursingCertificateUrl: string;

    /*荣誉证书 */
    honorCertificateUrl: string;

    /*身高（单位CM） */
    height: number;

    /*体重（单位KG） */
    weight: number;

    /*几年工作经验 */
    workYear: number;

    /*户籍所在地 */
    registeredResidence: string;

    /*属相 */
    chineseZodiac: string;

    /*教育背景：小学、初中、高中、专科、本科、硕士、博士 */
    educational: string;

    /*邮箱 */
    email: string;

    /*创建时间 */
    createTime: string;

    /*是否删除：0=未删除、1=已删除 */
    isDelete: number;

    /*角色Id */
    roleIds: any[];

    /*角色名称 */
    roleNames: any[];
  }

  // 员工保存请求参数
  export interface ReqEmployeeSaveParams {
    /*员工Id */
    id: number;

    /*员工姓名 */
    name: string;

    /*员工手机号 */
    phone: string;

    /*性别：1=男、2=女 */
    gender: number;

    /*身份证号 */
    idCard: string;

    /*居住地址 */
    address: string;

    /*头像Url */
    avatarUrl: string;

    /*员工照片 */
    photoUrls: {
      /*图像Url */
      url: string;

      /*图像Id */
      uid: number;
    }[];

    /*健康证 */
    healthCertificateUrl: string;

    /*护理证 */
    nursingCertificateUrl: string;

    /*荣誉证书 */
    honorCertificateUrl: string;

    /*身高（单位CM） */
    height: number;

    /*体重（单位KG） */
    weight: number;

    /*几年工作经验 */
    workYear: number;

    /*户籍所在地 */
    registeredResidence: string;

    /*教育背景：小学、初中、高中、专科、本科、硕士、博士 */
    educational: string;

    /*角色Id */
    roleIds: Record<string, unknown>[];
  }

  // 删除员工
  export interface ReqEmployeeDeleteParams {
    /*员工id */
    id?: number[];
  }

  // 设置员工状态
  export interface ReqEmployeeStatusParams {
    /*员工Id */
    id?: number;

    /*状态：0=禁用、1=启用 */
    status?: number;
  }

  // 重置员工密码
  export interface ReqEmployeeResetPasswordParams {
    /*员工Id */
    id?: number;
  }
}

// 角色管理模块
export namespace Role {
  // 角色列表查询参数
  export interface ReqRoleParams {
    name?: string;
  }

  // 角色保存参数
  export interface ReqRoleSaveParams {
    id?: number;
    name: string;
    halfSelectedPermissionIds?: number[];
    selectAllPermissionIds?: number[];
  }

  // 角色删除参数
  export interface ReqRoleDeleteParams {
    ids: number[];
  }

  // 角色列表响应
  export interface ResRoleList {
    id: number;
    name: string;
    createTime: string;
  }

  // 权限树节点
  export interface PermissionNode {
    id: number;
    type: string;
    title: string;
    name: string;
    parentId: number;
    children: PermissionNode[];
    checked: boolean;
    indeterminate: boolean;
  }

  // 设置角色权限参数
  export interface ReqSetRolePermissionsParams {
    RoleId: number;
    PermissionIds: number[];
  }
}

// 公司管理模块
export namespace Company {
  // 公司列表查询参数
  export interface ReqCompanyParams extends ReqPage {
    /*公司名称 */
    name?: string;

    /*版本 */
    version?: string;
  }

  // 公司列表响应参数
  export interface ResCompanyList {
    /*公司ID */
    id: number;

    /*公司名称 */
    name: string;

    /*版本 */
    version: string;

    /*版本过期时间 */
    versionExpiryTime: string;

    /*创建人 */
    createBy: string;

    /*省份名称 */
    provinceName?: string;

    /*省份ID */
    provinceId?: number;

    /*城市名称 */
    cityName?: string;

    /*城市ID */
    cityId?: number;

    /*地区名称 */
    areaName?: string;

    /*地区ID */
    areaId?: number;

    /*详细地址 */
    address?: string;

    /*联系人姓名 */
    contactName?: string;

    /*联系人手机号 */
    contactPhone?: string;

    /*创建时间 */
    createTime: string;

    /*是否删除：0=未删除、1=已删除 */
    isDelete: number;
  }

  // 公司保存请求参数
  export interface ReqCompanySaveParams {
    /*公司ID */
    id?: number;

    /*公司名称 */
    name?: string;

    /*版本 */
    version?: string;

    /*版本过期时间 */
    versionExpiryTime?: string;

    /*省份名称 */
    provinceName?: string;

    /*省份ID */
    provinceId?: number;

    /*城市名称 */
    cityName?: string;

    /*城市ID */
    cityId?: number;

    /*地区名称 */
    areaName?: string;

    /*地区ID */
    areaId?: number;

    /*详细地址 */
    address?: string;

    /*联系人姓名 */
    contactName?: string;

    /*联系人手机号 */
    contactPhone?: string;
  }
}

// 老人信息管理模块
export namespace Elderly {
  // 老人列表查询参数
  export interface ReqElderlyInfoParams extends ReqPage {
    /*老人姓名 */
    name?: string;

    /*身份证号 */
    idCard?: string;

    /*房间号 */
    roomNumber?: string;

    /*状态 */
    status?: number;

    /*性别 */
    gender?: number;

    /*血型 */
    bloodType?: number;

    /*行动能力状态 */
    mobilityStatus?: number;

    /*是否设置过照护计划：0=未设置，1=已设置 */
    isSettingCarePlan?: number;
  }

  // 老人列表响应参数
  export interface ResElderlyInfoList {
    /*老人唯一ID */
    id: number;

    /*老人姓名 */
    name: string;

    /*老人昵称 */
    nickName?: string;

    /*性别：0-未知，1-男，2-女 */
    gender?: number;

    /*性别 */
    genderText?: string;

    /*身份证号 */
    idCard?: string;

    /*出生日期 */
    dateOfBirth?: string;

    /*年龄 */
    age?: number;

    /*房间号 */
    roomNumber?: string;

    /*床位号 */
    bedNumber?: string;

    /*本人联系电话 */
    contactPhone?: string;

    /*微信号 */
    wechatId?: string;

    /*紧急联系人姓名 */
    emergencyContactName?: string;

    /*紧急联系人关系 */
    emergencyContactRelation?: string;

    /*紧急联系人电话 */
    emergencyContactPhone?: string;

    /*过敏史 */
    allergies?: string;

    /*血型 */
    bloodType?: number;

    /*重大疾病史 */
    majorMedicalHistory?: string;

    /*当前服用药物 */
    currentMedications?: string;

    /*行动能力状态 */
    mobilityStatus?: number;

    /*风险防范 */
    riskPrevention?: string;

    /*特殊照护注意事项 */
    specialCarePrecautions?: string;

    /*个性化照护需求 */
    personalizedCareNeeds?: string;

    /*是否设置过照护计划：0=未设置，1=已设置 */
    isSettingCarePlan?: number;

    /*饮食要求 */
    dietaryRequirements?: string;

    /*入住日期 */
    checkInDate?: string;

    /*当前状态 */
    status: number;

    /*头像 */
    avatarUrl?: string;

    /*照片存储路径 */
    photoUrls?: any[];

    /*创建时间 */
    createTime?: string;

    /*合同到期日期 */
    contractExpiryDate?: string;

    /*个人生活习惯 */
    personalHabits?: string;

    /*其他备注 */
    notes?: string;

    /*家庭地址 */
    address?: string;

    /*属相 */
    chineseZodiac?: string;

    /*照护人员ID列表 */
    careWorkerEmployeeIds?: string[];

    /*照护人员列表 */
    elderlyCareWorkerList?: ResElderlyCareWorkerEmployeeDto[];
  }

  // 老人照护人员响应参数
  export interface ResElderlyCareWorkerEmployeeDto {
    /*照护员工Id */
    employeeId: number;

    /*照护员名称 */
    employeeName: string;
  }

  // 老人保存请求参数
  export interface ReqElderlyInfoSaveParams {
    /*老人唯一ID */
    id?: number;

    /*老人姓名 */
    name?: string;

    /*老人昵称 */
    nickName?: string;

    /*性别 */
    gender?: number;

    /*身份证号 */
    idCard?: string;

    /*出生日期 */
    dateOfBirth?: Record<string, unknown>;

    /*属相 */
    chineseZodiac?: string;

    /*房间号 */
    roomNumber?: string;

    /*床位号 */
    bedNumber?: string;

    /*本人联系电话 */
    contactPhone?: string;

    /*微信号 */
    wechatId?: string;

    /*紧急联系人姓名 */
    emergencyContactName?: string;

    /*紧急联系人电话 */
    emergencyContactPhone?: string;

    /*紧急联系人关系 */
    emergencyContactRelation?: string;

    /*血型 */
    bloodType?: number;

    /*过敏史 */
    allergies?: string;

    /*重大疾病史 */
    majorMedicalHistory?: string;

    /*当前服用药物 */
    currentMedications?: string;

    /*行动能力状态 */
    mobilityStatus?: number;

    /*饮食要求 */
    dietaryRequirements?: string;

    /*入住日期 */
    checkInDate?: Record<string, unknown>;

    /*合同到期日期 */
    contractExpiryDate?: Record<string, unknown>;

    /*图像 */
    photoUrls?: any[];

    /*个人生活习惯 */
    personalHabits?: string;

    /*其他备注 */
    notes?: string;

    /*地址 */
    address?: string;

    /*头像 */
    avatarUrl?: string;

    /*当前状态：1=在住、2=退住 */
    status?: number;
  }

  // 删除老人参数
  export interface ReqElderlyInfoDeleteParams {
    id: number[];
  }

  // 设置老人状态参数
  export interface ReqElderlyInfoStatusParams {
    id: number;
    status: number;
  }

  // 老人照护计划动作
  export interface ElderlyCarePlanMissionDto {
    /*主键Id */
    id: number;

    /*照护项目分类Id */
    categorizeId: number;

    /*照护项目Id */
    careMissionId: number;

    /*照护项目名称 */
    name: string;

    /*照护项目描述、注意事项 */
    description?: string;

    /*是否每日照护项目：0=否、1=是 */
    isDailyMission: number;

    /*每日照护项目：建议开始时间（HH:mm） */
    dailyMissionStartTime?: string;

    /*每日照护项目：建议开始时间（HHmm） */
    dailyMissionStartTimeValue?: number;

    /*每日照护项目：建议结束时间（HH:mm） */
    dailyMissionEndTime?: string;

    /*每日照护项目：建议结束时间（HHmm） */
    dailyMissionEndTimeValue?: number;

    /*每日照护项目：建议执行次数 */
    dailyMissionExecutionCount?: number;

    /*是否需要拍照打卡：0=不需要、1=需要 */
    isTakePhotos: boolean;

    /*排序 */
    sort?: number;

    /*是否删除：0=未删除、1=已删除 */
    isDelete?: number;

    /*照护项目执行护理员工列表 */
    careWorkerEmployeeIds?: string;

    /*照护项目执行护理员工列表 */
    careWorkerEmployeeIdList?: string[];
  }

  // 保存老人照护计划
  export interface ReqSaveElderlyCarePlanInput {
    /*老人唯一ID */
    elderlyId: number;

    /*既往史 */
    majorMedicalHistory?: string;

    /*过敏史 */
    allergies?: string;

    /*风险防范 */
    riskPrevention?: string;

    /*特殊照护注意事项 */
    specialCarePrecautions?: string;

    /*个性化照护需求 */
    personalizedCareNeeds?: string;

    /*老人照护计划动作 */
    planMissionList: ElderlyCarePlanMissionDto[];
  }
}

// 系统地点管理模块
export namespace SysPlaces {
  // 系统地点类目列表响应参数
  export interface ReqResSysPlacesListParam {
    // 父级ID，默认为1（获取中国所有省份）
    parentId: number;
    // 是否获取所有层级
    getAllLevels: boolean;
  }

  // 系统地点列表响应参数
  export interface ResSysPlacesListDto {
    // 主键ID
    id: number;
    // 父级ID
    parentId: number;
    // 名称
    cname: string;
    // 类型
    ctype: number;
  }
}

// 照护项目管理模块
export namespace CareMission {
  /*照护项目分类列表请求参数*/
  export interface ReqCareMissionCategorizeListParams {
    /*是否包含照护项目 */
    includeMissions: boolean;

    /*是否选择平台任务 */
    selectPlatform?: boolean;

    /*任务名称 */
    name?: string;

    /*任务时间 */
    time?: string;
  }

  // 照护项目类别列表响应参数
  export interface ResCareMissionCategorize {
    /*任务类别Id */
    id: number;

    /*任务类别名称 */
    name: string;

    /*公司Id */
    companyId: number;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*创建人 */
    createBy: number;

    /*更新时间 */
    updateTime: Record<string, unknown>;

    /*更新人 */
    updateBy: number;

    /*排序 */
    sort: number;

    // 照护项目列表
    careMissions: ResCareMission[];
  }

  // 照护项目响应参数
  export interface ResCareMission {
    /*主键Id */
    id: number;

    /*公司Id */
    companyId: number;

    /*照护项目分类Id */
    categorizeId: number;

    /*照护项目名称 */
    name: string;

    /*照护项目描述、注意事项 */
    description: string;

    /*是否每日照护项目：0=否、1=是 */
    isDailyMission: number;

    /*每日照护项目：建议开始时间（HH:mm） */
    dailyMissionStartTime?: string;

    /*每日照护项目：建议结束时间（HH:mm） */
    dailyMissionEndTime?: string;

    /*每日照护项目：建议开始时间（HHmm） */
    dailyMissionStartTimeValue?: number;

    /*每日照护项目：建议结束时间（HHmm） */
    dailyMissionEndTimeValue?: number;

    /*建议执行次数 */
    dailyMissionExecutionCount: number;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*创建人 */
    createBy: number;

    /*更新时间 */
    updateTime: Record<string, unknown>;

    /*更新人 */
    updateBy: number;

    /*排序 */
    sort: number;

    /*是否选择 */
    selected?: boolean;
  }

  // 照护项目分类保存请求参数
  export interface ReqCareMissionCategorizeSaveParams {
    /*任务类别Id（新增时为空，编辑时有值） */
    id?: number;

    /*任务类别名称 */
    name?: string;

    /*排序 */
    sort?: number;
  }

  // 照护项目保存请求参数
  export interface ReqCareMissionSaveParams {
    /*主键Id（新增时为空，编辑时有值） */
    id?: number;

    /*照护项目分类Id */
    categorizeId: number;

    /*照护项目名称 */
    name: string;

    /*照护项目描述、注意事项 */
    description?: string;

    /*是否每日照护项目：0=否、1=是 */
    isDailyMission: number;

    /*每日照护项目：建议开始时间（HH:mm） */
    dailyMissionStartTime?: string;

    /*每日照护项目：建议结束时间（HH:mm） */
    dailyMissionEndTime?: string;

    /*排序 */
    sort?: number;
  }

  // 照护项目分类排序请求参数
  export interface ReqCareMissionCategorizeSortParams {
    /*分类Id */
    id?: number;

    /*排序值 */
    sort?: number;
  }
}

// 照护计划模板管理模块
export namespace CarePlanTemplate {
  // 照护计划模板列表响应参数
  export interface ResCarePlanTemplate {
    /*模板Id */
    id: number;

    /*公司Id */
    companyId: number;

    /*模板名称 */
    name: string;

    /*个性化照护需求 */
    personalizedCareNeeds?: string;

    /*排序 */
    sort: number;

    // 照护项目列表
    missionList: ResCarePlanTemplateMissionDto[];
  }

  // 照护计划模板任务列表响应参数
  export interface ResCarePlanTemplateMissionDto {
    /*主键Id */
    id?: number;

    /*照护项目分类Id */
    categorizeId: number;

    /*照护项目Id */
    careMissionId: number;

    /*照护项目名称 */
    name: string;

    /*照护项目描述、注意事项 */
    description: string;

    /*是否每日照护项目：0=否、1=是 */
    isDailyMission: number;

    /*每日照护项目：建议开始时间（HH:mm） */
    dailyMissionStartTime?: string;

    /*每日照护项目：建议结束时间（HH:mm） */
    dailyMissionEndTime?: string;

    /*每日照护项目：建议开始时间（HHmm） */
    dailyMissionStartTimeValue?: number;

    /*每日照护项目：建议结束时间（HHmm） */
    dailyMissionEndTimeValue?: number;

    /*每日照护项目：建议执行次数 */
    dailyMissionExecutionCount?: number;

    /*更新时间 */
    updateTime?: string;

    /*更新时间 */
    updateTimeText?: string;

    /*排序 */
    sort?: number;

    /*是否删除：0=未删除、1=已删除 */
    isDelete: number;
  }

  // 保存照护计划模板请求参数
  export interface ReqSaveCarePlanTemplateParams {
    /*模板Id（新增时为空，编辑时有值） */
    id?: number;

    /*模板名称 */
    name: string;

    /*个性化照护需求 */
    personalizedCareNeeds?: string;

    /*排序 */
    sort?: number;

    /*照护项目列表 */
    missionList: ResCarePlanTemplateMissionDto[];
  }

  // 复制照护计划模板请求参数
  export interface ReqCopyCarePlanTemplateParams {
    /*模板Id */
    id: number;

    /*模板名称 */
    name: string;
  }
}

// 照护记录管理模块
export namespace CareRecord {
  // 获取老人照护记录列表输入参数
  export interface ReqElderlyCareRecordListInput extends ReqPage {
    /*老人 */
    elderlyId?: number;
  }

  // 老人照护记录列表响应参数
  export interface ResElderlyCareRecordDto {
    /*主键Id */
    id: number;

    /*长者Id */
    elderlyId: number;

    /*照护项目分类Id */
    categorizeId: number;

    /*照护项目Id */
    careMissionId: number;

    /*照护项目名称 */
    name: string;

    /*照护项目描述、注意事项 */
    description: string;

    /*是否每日照护任务：0=否、1=是 */
    isDailyMission: number;

    /*每日照护任务：建议开始时间（HH:mm） */
    dailyMissionStartTime: string;

    /*每日照护任务：建议结束时间（HH:mm） */
    dailyMissionEndTime: string;

    /*每日照护任务：建议结束时间（HHmm） */
    dailyMissionEndTimeValue: number;

    /*每日照护任务：建议开始时间（HHmm） */
    dailyMissionStartTimeValue: number;

    /*每日照护任务：建议执行次数 */
    dailyMissionExecutionCount: number;

    /*是否需要拍照打卡：0=不需要、1=需要 */
    isTakePhotos: number;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*创建人 */
    createBy: number;

    /*更新时间 */
    updateTime: Record<string, unknown>;

    /*更新人 */
    updateBy: number;

    /*排序 */
    sort: number;

    /*照护项目执行护理员工列表 */
    careWorkerEmployeeIds: string;

    /*照护项目执行护理员工名称列表 */
    careWorkerEmployeeNames: Record<string, unknown>[];

    /*是否删除：0=未删除、1=已删除 */
    isDelete: number;

    /*长者照护计划项目Id */
    elderlyCareMissionId: number;

    /*完成时间 */
    completionTime: Record<string, unknown>;

    /*是否在建议时间内完成：0=不是、1=是 */
    completionAtSpecifiedTime: number;

    /*完成人 */
    completionBy: number;

    /*完成人名称 */
    completionByName: string;

    /*记录内容 */
    recordContent: string;

    /*照护记录媒体内容 */
    elderlyCareRecordMediaList: ResElderlyCareRecordMediaDto[];
  }

  export interface ResElderlyCareRecordMediaDto {
    /*主键Id */
    id: number;

    /*公司Id */
    companyId: number;

    /*长者照护记录Id */
    elderlyCareRecordId: number;

    /*文件Id */
    fileId: number;

    /*文档地址 */
    fileUrl: string;

    /*文件类型：mp3、image、video */
    fileType: string;

    /*音频长度（单位秒） */
    mp3Second: Record<string, unknown>;

    /*音频文字（语音识别内容） */
    mp3Text: string;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*创建人 */
    createBy: number;

    /*更新时间 */
    updateTime: Record<string, unknown>;

    /*更新人 */
    updateBy: number;

    /*是否删除：0=未删除、1=已删除 */
    isDelete: number;
  }
}

// 仪表盘
export namespace Dashboard {
  // 仪表盘响应参数
  export interface ResCompanyDashboard {
    /*长者数量 */
    elderlyCount: number;

    /*本月生日长者数量 */
    thisMonthBirthdayElderlyCount: number;

    /*男长者数量 */
    maleElderlyCount: number;

    /*女长者数量 */
    femaleElderlyCount: number;

    /*员工数量 */
    employeeCount: number;
  }
}
